草庐IT

Java final 与 C++ const

全部标签

setter/getter 中的 C++ const

我仍在学习C++,而且我到处都在阅读我必须使用const的所有地方(我认为是出于速度原因)。我通常这样写我的getter方法:constboolisReady(){returnready;}但我已经看到一些IDE以这种方式自动生成getter:boolgetReady()const{returnready;}但是,在编写委托(delegate)时,如果const在函数之后,我碰巧发现了这个错误:memberfunction'isReady'notviable:'this'argumenthastype'constVideoReader',butfunctionisnotmarkedco

c++ - 引用类型的数据成员提供 "loophole"围绕 const 正确性

我最近偶然发现了以下关于const正确性的“漏洞”:structInner{intfield=0;voidModify(){field++;}};structOuter{Innerinner;};classMyClass{public:Outerouter;Inner&inner;//referstoouter.inner,forconvenienceMyClass():inner(outer.inner){}voidConstMethod()const{inner.Modify();//oops;compiles}};似乎还有可能利用这个漏洞来修改声明为const的对象,我认为这是未

c++ - 引用类型的数据成员提供 "loophole"围绕 const 正确性

我最近偶然发现了以下关于const正确性的“漏洞”:structInner{intfield=0;voidModify(){field++;}};structOuter{Innerinner;};classMyClass{public:Outerouter;Inner&inner;//referstoouter.inner,forconvenienceMyClass():inner(outer.inner){}voidConstMethod()const{inner.Modify();//oops;compiles}};似乎还有可能利用这个漏洞来修改声明为const的对象,我认为这是未

c++ - 我是否正确地说 const_cast 然后修改绑定(bind)到临时的 ref-to-const 可以吗?

我想检查一下我对此事的理解和结论。在IRC上,有人问:Isitacceptabletoconst_castaconstreferencethat'sboundtoatemporaryobject?翻译:他有一个ref-to-const绑定(bind)到一个临时的,他想抛弃它的const-ness来修改它。我的回答是我问过asimilarquestion以前,共识似乎是临时对象本身并不是天生的const,因此您可以摆脱对它们的引用的const特征,并且通过结果修改它们。而且,只要原来的ref-to-const仍然存在,就不会影响临时对象的生命周期。即:intmain(){constint

c++ - 我是否正确地说 const_cast 然后修改绑定(bind)到临时的 ref-to-const 可以吗?

我想检查一下我对此事的理解和结论。在IRC上,有人问:Isitacceptabletoconst_castaconstreferencethat'sboundtoatemporaryobject?翻译:他有一个ref-to-const绑定(bind)到一个临时的,他想抛弃它的const-ness来修改它。我的回答是我问过asimilarquestion以前,共识似乎是临时对象本身并不是天生的const,因此您可以摆脱对它们的引用的const特征,并且通过结果修改它们。而且,只要原来的ref-to-const仍然存在,就不会影响临时对象的生命周期。即:intmain(){constint

c++ - 一些 const char * 在编译时不可用?

假设我们有一个模板函数,其非类型参数为constchar*,如下所示:templatevoidprint(){std::cout使用这个模板不会有问题,因为MESSAGE的日志可以在编译时推导出来,所以下面的用法是合法的:namespace{charnamespace_message[]="AnonymousNamespaceMessage";constexprcharnamespace_constexpr_message[]="AnonymousNamespaceConstexprMessage";}charmessage[]="Message";constexprcharconst

c++ - 一些 const char * 在编译时不可用?

假设我们有一个模板函数,其非类型参数为constchar*,如下所示:templatevoidprint(){std::cout使用这个模板不会有问题,因为MESSAGE的日志可以在编译时推导出来,所以下面的用法是合法的:namespace{charnamespace_message[]="AnonymousNamespaceMessage";constexprcharnamespace_constexpr_message[]="AnonymousNamespaceConstexprMessage";}charmessage[]="Message";constexprcharconst

c++ - 为什么 lambda 的调用运算符隐式为 const?

我在下面的函数中有一个小的“lambda表达式”:intmain(){intx=10;autolambda=[=](){returnx+3;};}下面是为上述lambda表达式生成的“匿名闭包类”。intmain(){intx=10;class__lambda_3_19{public:inline/*constexpr*/intoperator()()const{returnx+3;}private:intx;public:__lambda_3_19(int_x):x{_x}{}};__lambda_3_19lambda=__lambda_3_19{x};}编译器生成的闭包“opera

c++ - 为什么 lambda 的调用运算符隐式为 const?

我在下面的函数中有一个小的“lambda表达式”:intmain(){intx=10;autolambda=[=](){returnx+3;};}下面是为上述lambda表达式生成的“匿名闭包类”。intmain(){intx=10;class__lambda_3_19{public:inline/*constexpr*/intoperator()()const{returnx+3;}private:intx;public:__lambda_3_19(int_x):x{_x}{}};__lambda_3_19lambda=__lambda_3_19{x};}编译器生成的闭包“opera

c++ - 为什么 const/non-const 函数重载的继承不明确?

我试图创建两个类,第一个类是函数的非const实现,第二个类是const实现。这是一个小例子:classBase{protected:intsome;};classA:publicvirtualBase{constint&get()const{returnsome;}};classB:publicvirtualBase{int&get(){returnsome;}};classC:publicA,B{};Ctest;test.get();//ambiguous对get函数的调用不明确。不管const版本需要匹配更多的需求。(在constC上调用get也是模棱两可的,但有一个可能的函数可